package com.leetcode;

import java.util.Arrays;

/**
 * 349. 两个数组的交集
 * 排序 + 双指针
 *
 * @author fy
 * @date 2022/4/6 9:55
 */
public class Solution349_4 {

    public int[] intersection(int[] nums1, int[] nums2) {
        // 先排序
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        // 双指针读取交集存入新的数组
        int idx1 = 0;
        int idx2 = 0;
        int[] nums = new int[Math.max(nums1.length, nums2.length)];
        int idx = 0;
        while (idx1 < nums1.length && idx2 < nums2.length) {
            if (nums1[idx1] == nums2[idx2]) {
                if (idx == 0 || (idx - 1 >= 0 && nums1[idx1] != nums[idx - 1])) {
                    nums[idx++] = nums1[idx1];
                }
                idx1++;
                idx2++;
            } else if (nums1[idx1] < nums2[idx2]) {
                idx1++;
            } else {
                idx2++;
            }
        }
        // 裁剪数组的长度 到 实际的长度
        // return Arrays.copyOfRange(nums, 0, idx);
        return Arrays.copyOf(nums, idx);
    }

}
